package com.example.app.entity

/*
//在java中所有类都继承自Object
//在kt中所有类都继承自Any
class User:Any {
    var username: String? = null
    @JvmField
    var password: String? = null

    //kotlin中的get set方法是这样的，而且系统是帮我们自动写好的，我下面写的属于冗余
    var code: String? = null
        set(value) {
            field = value
        }
        get() {
            return field
        }

    constructor(){}

    constructor(username: String?, password: String?, code: String?) {
        this.username = username
        this.password = password
        this.code = code
    }
}
*/


/*每个类默认都有一个不带参数的主构造函数
class User constructor() {
    var username: String? = null

    @JvmField
    var password: String? = null

    //kotlin中的get set方法是这样的，而且系统是帮我们自动写好的，我下面写的属于冗余
    var code: String? = null
        set(value) {
            field = value
        }
        get() {
            return field
        }


    //主构造器必须被调用
    constructor(username: String?, password: String?, code: String?) : this() {
        this.username = username
        this.password = password
        this.code = code
    }
}*/

/*//每个类默认都有一个不带参数的主构造函数,当然你也可以显示地给它指明参数
//主构造函数的特点是没有函数体，直接定义在类名的后面即可
//主构造函数没有函数体，所以我们如果想在主构造函数中写一写逻辑，就需要在init结构体中完成
class User constructor(username: String?, password: String?, code: String?){
    var username: String? = null

    @JvmField
    var password: String? = null

    //kotlin中的get set方法是这样的，而且系统是帮我们自动写好的，我下面写的属于冗余
    var code: String? = null
        set(value) {
            field = value
        }
        get() {
            return field
        }

    init {
        this.username = username
        this.password = password
        this.code = code
    }

}*/
/**
 * 高级用法使用：使用data关键字修饰，表示你希望这个类是一个数据类。
 * Kotlin会根据主构造函数中的参数，帮你自动生成equals()、hashCode()、copy()、toString()等固定但是无实际逻辑意义的方法
 */
data class User constructor(var username: String?, var password: String?, var code: String?) {
    constructor() : this(null, null, null)
}